package com.lagou;

public class StudentService {

    /**
     * 判断数组中所有的数字是否只出现一次。给定一个数组array，
     * 判断数组 array 中是否所有的数字都只 出现过一次。
     * 例如，arr = {1, 2, 3}，输出 YES。又如，arr = {1, 2, 1}，输出 NO。
     * 约束时间复杂度为 O(n)。
     * @param array a
     * @return boolean
     */
    static boolean serviceA(int[] array){
        if (array==null){
            return true;
        }
        boolean[] map=new boolean[256];
        for (int i=0;i<array.length;i++){
            if (map[array[i]]){
                return false;
            }
            map[array[i]]=true;
        }
        return true;
    }

    /**
     * 获得金矿最优收益
     * @param w 工人数量
     * @param n 可选金矿数量
     * @param p 金矿开采所需的工人数量
     * @param g 金矿储量
     * @return
     */
    //递归进行求解
    public static int getBestGoldMining(int w,int n,int[] p,int[] g){
        if (w ==0||n==0){
            return 0;
        }
        if (w<p[n-1]){
            return getBestGoldMining(w,n-1,p,g);
        }
        return Math.max(getBestGoldMining(w,n-1,p,g),getBestGoldMining(w-p[n-1],n-1,p,g) + g[n-1]);
    }

    public static void main(String[] args) {
        int[] arr={1,3,5,7,9,0,22,33,12,56,78,98,8};
        boolean a = serviceA(arr);
        arr= new int[]{1, 3, 5, 7, 9, 0, 22, 33, 12, 56, 78, 98, 3};
        boolean b = serviceA(arr);
        System.out.println(a);
        System.out.println(b);

        int w = 10;
        int[] p = {5,5,3,4,3};
        int[] g = {400,500,200,300,350};
        System.out.println("最优收益：" + getBestGoldMining(w,g.length,p,g));
    }
}
